﻿namespace Lite.Messaging
{
    /// <summary>
    /// A generic interface for manipulating a message suitable for sending.
    /// </summary>
    public interface ISendMessage
        : IMessage
    {
        /// <summary>
        /// Sets the value of the specified parameter in the message.
        /// </summary>
        /// <typeparam name="T">
        /// The type of the parameter value; this should be inferred from
        /// <paramref name="parameter"/>.
        /// </typeparam>
        /// <param name="parameter">
        /// A parameter descriptor that identifies which value to set.
        /// </param>
        /// <param name="value">
        /// The value to set for the specified parameter.
        /// </param>
        void SetValue<T>(IParameter<T> parameter, T value);

        /// <summary>
        /// Remove all parameter values from this message.
        /// </summary>
        void ClearValues();
    }
}